<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>包装类</title>
        <script>
        //***包装类是浏览器自身使用的，开发者不需要操作***

        //JS中提供了三个包装类，它们可以将基本数据类型转换为对象；
            //String()：将基本数据类型的字符串转换为String对象；
            //Number()：将基本数据类型的数值转换为Number对象；
            //Boolean()：将基本数据类型的布尔值转换为Boolean对象；
            var num = new Number(3);
            var str = new String("hello");
            var bool = new Boolean(true);
            console.log(typeof num);  //object
            console.log(typeof str);  //object
            console.log(bool);        //Boolean {true}
            console.log(typeof bool); //object
            
            //但在实际开发中不使用基本数据类型的对象
            //当对一些基本数据类型的值去调用属性和方法时，浏览器临时使用包装类
            //将其转换为对象，然后再调用对象的属性和方法;调用结束后再将其转换为
            //基本数据类型；
            var s = 156;
            s = s.toString();
            console.log(s);         //156
            console.log(typeof s);  //string

            
        //字符串的相关属性和方法（在底层，字符串是以数组的形式保存的）；
        //属性
            //length：获取字符串的长度；
            var str2 = "hello,world";
            console.log(str2.length);  //11

        //方法（大都不会改变原字符串）
        //一.获取字符
            //charAt()：根据索引返回字符串指定位置的字符；
            console.log(str2.charAt(0));  //h
            console.log(str2.charAt(6));  //w
            //charCodeAt()：根据索引返回字符串指定字符对应的Unicode编码；
            console.log(str2.charCodeAt(6));  //119
            //String.fromCharCode()：根据字符编码获取字符；
            console.log(String.fromCharCode(119));  //w

        //二.连接字符串
            //concat()：连接两个或多个字符串（作用和+类似）;
            console.log(str2.concat("猪八戒"));  //hello,world猪八戒

        //三.检索
            //indexOf()：检索一个字符串中是否含有指定字符
            //           如果有该字符，则返回其索引;
            console.log(str2.indexOf("o")); //4
            //           如果没有则返回-1;
            console.log(str2.indexOf("m")); //-1
            //           可以指定第二个参数为开始查找的位置；
            console.log(str2.indexOf("l",5)); //9
            //lastIndexOf()：用法同上，
            // 不同点：indexOf()从前向后查找，lastIndexOf()从后向前查找；

        //四.截取
            //slice()：截取字符串中指定的内容并返回(同数组中的slice方法)；
            //subString()：用法同上，
            // 不同点：1.不接收负值作为参数，如果有负值则默认使用0；
            //        2.自动调整参数的位置，如果第二个参数小于第一个，则自动交换；
            //substr()：截取字符串中指定的内容(同数组的splice方法)；
            //          参数1：开始位置索引，参数2：截取的长度；
            console.log(str2.substr(3,8));  //lo,world

        //五.拆分
            //split()：将字符串拆分为数组(类似于数组的join方法);
            //         需传递一个字符串作为参数，并以它为分割线拆分为数组；
            str3 = "abcdefg";
            console.log(str3.split("d")); //['abc', 'efg']
            //         如果传递空串，则每个字符都转换为一个元素；
            console.log(str3.split("")); //['a', 'b', 'c', 'd', 'e', 'f', 'g']

        //六.大小写转换
            //toUpperCase()：将字符串的小写字符转换为大写并返回;
            //toLowerCase()：将字符串的大写字符转换为小写并返回；
        </script>
    </head>
    <body>
        
    </body>
</html>